/**
 * @param {string} path
 * @returns {Boolean}
 */
// export function isExternal(path) {
//   return /^(https?:|mailto:|tel:|http:)/.test(path)
// }

// /**
//  * @param {string} str
//  * @returns {Boolean}
//  */
// export function validUsername(str) {
//   const valid_map = ['admin', 'editor']
//   return valid_map.indexOf(str.trim()) >= 0
// }

// /**
//  * @param {string} url
//  * @returns {Boolean}
//  */
// export function validURL(url) {
//   const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
//   return reg.test(url)
// }

// /**
//  * @param {string} str
//  * @returns {Boolean}
//  */
// export function validLowerCase(str) {
//   const reg = /^[a-z]+$/
//   return reg.test(str)
// }

// /**
//  * @param {string} str
//  * @returns {Boolean}
//  */
// export function validUpperCase(str) {
//   const reg = /^[A-Z]+$/
//   return reg.test(str)
// }

// /**
//  * @param {string} str
//  * @returns {Boolean}
//  */
// export function validAlphabets(str) {
//   const reg = /^[A-Za-z]+$/
//   return reg.test(str)
// }

// /**
//  * @param {string} email
//  * @returns {Boolean}
//  */
// export function validEmail(email) {
//   const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
//   return reg.test(email)
// }

// /**
//  * @param {string} str
//  * @returns {Boolean}
//  */
// export function isString(str) {
//   if (typeof str === 'string' || str instanceof String) {
//     return true
//   }
//   return false
// }

// /**
//  * @param {Array} arg
//  * @returns {Boolean}
//  */
// export function isArray(arg) {
//   if (typeof Array.isArray === 'undefined') {
//     return Object.prototype.toString.call(arg) === '[object Array]'
//   }
//   return Array.isArray(arg)
// }
// //金额校验(保留两位小数)
// export const moneyCheck= function (rule, val, callback) {
//   const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
//   if (!reg.test(val)&&val!=' '&&val!=0) {
//       return callback(new Error("请输入正确格式"));
//   }
//   return callback();
// };
/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:|http:)/.test(path);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUsername(str) {
  const valid_map = ["admin", "editor"];
  return valid_map.indexOf(str.trim()) >= 0;
}

/**
 * @param {string} url
 * @returns {Boolean}
 */
export function validURL(url) {
  const reg =
    /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
  return reg.test(url);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validLowerCase(str) {
  const reg = /^[a-z]+$/;
  return reg.test(str);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUpperCase(str) {
  const reg = /^[A-Z]+$/;
  return reg.test(str);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validAlphabets(str) {
  const reg = /^[A-Za-z]+$/;
  return reg.test(str);
}

/**
 * @param {string} email
 * @returns {Boolean}
 */
export function validEmail(email) {
  const reg =
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return reg.test(email);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function isString(str) {
  if (typeof str === "string" || str instanceof String) {
    return true;
  }
  return false;
}
/**
 * @param {Number} str
 * @returns {Boolean}
 */
export function isNumber(str) {
  if (Number.isInteger(str)) {
    return true;
  }
  return false;
}

/**
 * @param {Array} arg
 * @returns {Boolean}
 */
export function isArray(arg) {
  if (typeof Array.isArray === "undefined") {
    return Object.prototype.toString.call(arg) === "[object Array]";
  }
  return Array.isArray(arg);
}

// 必填项
export function required(rule, value, callback) {
  if (value.length < 1) {
    callback(new Error("必填项！"));
  } else {
    callback();
  }
}
// 时间不能为空!
export function requiredTime(rule, value, callback) {
  if (value.length < 1) {
    callback(new Error("时间不能为空!"));
  } else {
    callback();
  }
}
// 域名不合法
export function urlDomain(rule, value, callback) {
  let regexp = /^[^@-]+\.com(\.cn)?$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("域名不合法"));
    }
  } else {
    callback();
  }
}
// 域名不合法
export function commonDomain(rule, value, callback) {
  let regexp =
    /(^[A-Za-z0-9\u4e00-\u9fa5]+)((\-([A-Za-z0-9\u4e00-\u9fa5]+))?)(\.([A-Za-z0-9\u4e00-\u9fa5]+)((\-([A-Za-z0-9\u4e00-\u9fa5]+))?))+$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("域名不合法"));
    }
  } else {
    callback();
  }
}
// wap域名不合法
export function wapDomian(rule, value, callback) {
  let regexp = /^([A-Za-z0-9])+\.?([A-Za-z0-9])+$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("wap域名不合法"));
    }
  } else {
    callback();
  }
}
// masId不合法
export function masId(rule, value, callback) {
  let regexp = /^M.{2}AH.{9}$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("masId不合法！"));
    }
  } else {
    callback();
  }
}
// MAS标准代码不合法
export function masStandard(rule, value, callback) {
  let regexp = /^MAH\d{7}$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("MAS标准代码不合法"));
    }
  } else {
    callback();
  }
}
// MAS标准代码不合法
export function mas06Standard(rule, value, callback) {
  let regexp = /^M06AH\d{9}$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("MAS标准代码不合法"));
    }
  } else {
    callback();
  }
}
// 带宽不合法
export function lineSpeed(rule, value, callback) {
  let regexp = /^[2468]$|^[1-9][02468]$|^1[0-4][02468]|^15[024]$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("带宽不合法"));
    }
  } else {
    callback();
  }
}
// 比例输入不合法
export function scale(rule, value, callback) {
  var objArr = value.split(":");
  let regexp = /^[2468]$|^[1-9][02468]$|^1[0-4][02468]|^15[024]$/;
  if (value) {
    if (
      objArr.length == 2 &&
      parseInt(objArr[0]) + parseInt(objArr[1]) == 100
    ) {
      if (value.search(regexp) != -1) {
        callback();
      } else {
        callback(new Error("带宽不合法"));
      }
    } else {
      callback();
    }
  } else {
    callback();
  }
}
// 时间格式
export function HHmm(rule, value, callback) {
  let regexp = /^([0-1][0-9]|[2][0-3])[0-5][0-9]$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("时间格式为HHmm"));
    }
  } else {
    callback();
  }
}
// export function HHmm(rule, value, callback){
//     let regexp = /^([0-1][0-9]|[2][0-3])[0-5][0-9]$/;
//     if (value) {
//         if (value.search(regexp) != -1) {
//             callback();
//         } else {
//             callback(new Error('时间格式为HHmm'));
//         }
//     } else {
//         callback();
//     }
// }
// 日期格式
export function dateFormat(rule, value, callback) {
  let regexp = /^\d{2}\/\d{2}\/\d{2,4}$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("日期格式MM/DD/YYYY"));
    }
  } else {
    callback();
  }
}
// 网址不合法
export function url(rule, value, callback) {
  let regexp = /^(http|https|ftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("网址不合法"));
    }
  } else {
    callback();
  }
}
// 必须为大写英文字母
export function upLetter(rule, value, callback) {
  let regexp = /^[A-Z]+$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("必须为大写英文字母"));
    }
  } else {
    callback();
  }
}
//邮箱校验
export function email(rule, value, callback) {
  // let regexp = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;
  let regexp =
    /^[a-z0-9]+([._\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("请输入正确格式的邮箱"));
    }
  } else {
    callback();
  }
}
//手机号校验
export function mobile(rule, value, callback) {
  let regexp = /^1[3-9]\d{9}$/;
  if (value) {
    if (value.search(regexp) != -1) {
      callback();
    } else {
      callback(new Error("请输入正确的手机号"));
    }
  } else {
    callback();
  }
}
//密码校验
export function passWord(rule, value, callback, aa) {
  // let reg = /^([a-z-A-Z-0-9\.\@\!\#\$\%\^\&\,\?\*\(\)]){8,20}$/;
  let reg = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)(?![A-Z]+$).{10}$/;
  if (value) {
    if (value.match(reg)) {
      callback();
    } else {
      callback(
        new Error("密码必须为8-20位数字、字母及特殊字符中的2种或2种以上的组合")
      );
    }
  } else {
    callback();
  }
  // let reg = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)(?![A-Z]+$).{10}$/;
}
//密码确认校验
export function validatePassCheck(rule, value, callback) {
  if (value === "") {
    callback(new Error("确认密码不能为空！"));
  } else if (value !== data.formValue.newPassword) {
    callback(new Error("确认密码与新密码不相同！"));
  } else {
    callback();
  }
}
//座机校验
export function tel(rule, value, callback) {
  let reg = /^((0\d{2,3}-\d{7,8}|(0\d{2,3}-\d{7,8}-\d{3,5}))|[0-9]{8})$/;
  if (value) {
    if (value.match(reg)) {
      callback();
    } else {
      callback(new Error("请输入正确的电话号"));
    }
  } else {
    callback();
  }
}
// 手机号和座机号
export function checkPhone(rule, value, callback) {
  let regEn = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
  if (!regEn.test(value)) {
    callback(new Error("请输入正确号码"));
  } else {
    callback();
  }
}
// 车牌号校验-包含新能源
export function checkPlateNum(rule, value, callback) {
  if (value && value !== "") {
    let regEn =
      /(^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$)/;
    if (!regEn.test(value)) {
      callback(new Error("请输入正确车牌号"));
    } else {
      callback();
    }
  } else {
    callback();
  }
}
// 身份证校验（比较详细）
export function checkIdCard(rule, value, callback) {
  let regEn = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  if (!regEn.test(value)) {
    callback(new Error("请输入正确身份证"));
  } else {
    // 校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10
    // 下面分别分析出生日期和校验位
    let num = value.toUpperCase();
    let len, re;
    len = num.length;
    if (len === 15) {
      re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
      let arrSplit = num.match(re); // 检查生日日期是否正确
      let dtmBirth = new Date(
        "19" + arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]
      );
      let bGoodDay;
      bGoodDay =
        dtmBirth.getYear() === Number(arrSplit[2]) &&
        dtmBirth.getMonth() + 1 === Number(arrSplit[3]) &&
        dtmBirth.getDate() === Number(arrSplit[4]);
      if (!bGoodDay) {
        callback(new Error("请输入正确身份证"));
      } else {
        // 将15位身份证转成18位 //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10
        let arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
        let arrCh = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
        var nTemp = 0,
          i;
        num = num.substr(0, 6) + "19" + num.substr(6, num.length - 6);
        for (i = 0; i < 17; i++) {
          nTemp += num.substr(i, 1) * arrInt[i];
        }
        num += arrCh[nTemp % 11];
        callback();
      }
    }
    if (len === 18) {
      re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
      let arrSplit = num.match(re); // 检查生日日期是否正确
      let dtmBirth = new Date(
        arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]
      );
      let bGoodDay;
      bGoodDay =
        dtmBirth.getFullYear() === Number(arrSplit[2]) &&
        dtmBirth.getMonth() + 1 === Number(arrSplit[3]) &&
        dtmBirth.getDate() === Number(arrSplit[4]);
      if (!bGoodDay) {
        callback(new Error("请输入正确身份证"));
      } else {
        // 检验18位身份证的校验码是否正确。 //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10
        let valnum;
        let arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
        let arrCh = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
        var nTemp = 0,
          i;
        for (i = 0; i < 17; i++) {
          nTemp += num.substr(i, 1) * arrInt[i];
        }
        valnum = arrCh[nTemp % 11];
        if (valnum !== num.substr(17, 1)) {
          callback(new Error("请输入正确身份证"));
        } else {
          callback();
        }
      }
    }
  }
}
// 正整数（常用于年龄数量类的校验）
export function checkNumber(rule, value, callback) {
  let regEn = /^[1-9]\d*$/;
  if (!regEn.test(value)) {
    callback(new Error("请输入数字"));
  } else {
    callback();
  }
}
// 数字校验
export function checkNumberPoint(rule, value, callback) {
  if (value && value !== "") {
    let regEn = /^(\-|\+)?\d+(\.\d)?$/;
    if (!regEn.test(value)) {
      callback(new Error("请输入数字"));
    } else {
      callback();
    }
  } else {
    callback();
  }
}